![]() |
![]() |
|
Zanka whileNaloga 2 (stran 52)Naloga zasnovana na nalogi https://lusy.fri.uni-lj.si/ucbenik/book/1203/index9.html 1. podnalogaNapišite program, ki te vpraša po nizu z Primer:
Uradna rešitev# niz = input("Vnesi niz: ") i = 1 while i <= 10: print(niz) i += 1 2. podnalogaDopolni ta program tako, da te najprej vpraša po celem številu Primer:
Uradna rešitev# n = int(input("Vpiši poljubno celo število: ")) niz = input("Vpiši niz: ") i = 1 while i <= n: print(niz) i += 1 Naloga 5 (stran 52)https://lusy.fri.uni-lj.si/ucbenik/book/1203/index9.html 1. podnalogaNaslednji program naj bi prebral števili
Uradna rešiteva = int(input("Vnesi a: ")) b = int(input("Vnesi b: ")) vsota = 0 while a <= b: vsota = vsota + a a = a + 1 print(vsota) Podražitve1. podnalogaNek izdelek naj bi se vsak teden podražil za 2%. Da bi razumeli, kaj to
pomeni, napišite funkcijo Za šaljivce, ki bodo funkcijo poklicali z negativno ceno ali ceno 0, vrnite -1. Uradna rešitevdef koliko_tednov(cena): """Koliko tednov traja, da ceno ob 2% podražitvi preseže 1000€""" if cena <= 0: # odpravimo šaljivce return -1 # smiselni podatki, računamo ... koncna_cena = 1000 trenutna_cena = cena tednov = 0 while trenutna_cena < koncna_cena: trenutna_cena = trenutna_cena * 1.02 tednov += 1 # to je isto kot tednov = tednov + 1 return tednov Bakterije1. podnalogaBakteriolog Bine preučuje bakterije. Naredil je sledeči poizkus:
bakterije je zaprl v škatlico pravokotne oblike s pregrado na sredini,
ki razdeli škatlico na dva kvadratna dela - poimenujmo ju Pozor! Premislite, kaj se dogaja na pregradi! Za začetni masi
zato bi program izpisal
Uradna rešitev# Določimo število tednov, ko se ustrezno zmanjša začetna porazdelitev bakterij masa_A = float(input('Masa v regiji A: ')) masa_B = float(input('Masa v regiji B: ')) korak = 0 while masa_A + masa_B >= 0.001: # skupna teža je še prevelika stara_A = masa_A # potrebovali bomo za izračun B-ja masa_A = masa_A * 0.12 # toliko jih ostane masa_A = masa_A + masa_B * 0.22 # toliko jih pa še pride iz B masa_B = masa_B * 0.12 masa_B = masa_B + stara_A * 0.22 korak += 1 # en korak več print('Korakov:', korak) Čaramo s celimi števili1. podnalogaSestavite funkcijo Tisti, ki že poznate funcije in metode za delo z nizi, teh prijemov tukaj ne smete uporabiti. V tej nalogi torej nikjer ne smemo uporabljati nizov! Uradna rešitevdef obrni_stevilo(n): """Funkcija obrne pozitivno celo število""" if n < 0: return 0 obrnjeno = 0 while n > 0: obrnjeno = obrnjeno * 10 + n % 10 n = n // 10 return obrnjeno 2. podnalogaNajprej si oglejte naslednjo funkcijo. Ugotovite, kaj počne. Očitno jo je pisal nek programer začetnik, kar lahko zlahka ugotovimo po odsotnosti komentarjev in izbiri imen spremenljivk.
Namig: pokličite jo s parametri Oboroženi z vedenjem o zgornji funkciji
sestavite funkcijo
Namig: kako delimo "peš"? Uradna rešitevdef kvocient(a, b, n): """Izračunamo a/b na n decimalk (za dec. piko)""" celi_del = a // b rezultat = str(celi_del) + '.' delimo = a % b # koliko še ostane decimalke = 0 while decimalke < n: # koliko decimalk potrebujemo delimo = delimo * 10 nova_dec = delimo // b rezultat = rezultat + str(nova_dec) # dodamo decimalko decimalke = decimalke + 1 # je ena več delimo = delimo % b # za naslednji korak return rezultat 3. podnalogaProgramer Mihec je sestavil funkcijo
Preizkusil jo je na storitvi Projekt Tomo, a je kar naprej dobival obvestila o napačnem rezultatu. Preizkusite jo še vi in jo ustrezno popravite! Uradna rešitevdef vsebuje(stevilo, k): """ ali število stevilo vsebuje števko k """ if (stevilo == 0) and (k == 0): return True stevilo = abs(stevilo) # zaradi neg. števil! while stevilo > 0: if stevilo % 10 == k: return True stevilo = stevilo // 10 return False 4. podnalogaSestavite funkcijo Uradna rešitevdef prestej_vsebuje(a, b, k): """ prešteje koliko je med a in b števil, ki vsebujejo števko k """ mini = min(a, b) maksi = max(a, b) stevilo = mini koliko = 0 # koliko jih zadošča pogoju while stevilo <= maksi: if vsebuje(stevilo, k): koliko += 1 stevilo = stevilo + 1 return koliko 5. podnalogaSestavite funkcijo Uradna rešitevdef vsebuje(stevilo, k): """ ali število stevilo vsebuje števko k """ if stevilo == k == 0 : return True while stevilo > 0: if stevilo % 10 == k: return True stevilo = stevilo // 10 return False def obrni_stevilo(n): """ Funkcija obrne pozitivno celo število""" obrnjeno = 0 while n > 0: obrnjeno = obrnjeno * 10 + n % 10 n = n // 10 return obrnjeno def prestej_prave(a, b, k): """ prešteje koliko je med a in b števil, ki zadoščajo pogoju k """ stevilo = a koliko = 0 # koliko jih zadošča pogoju while stevilo <= b: if vsebuje(stevilo, k) or stevilo % k == 0 or obrni_stevilo(stevilo) % k == 0: koliko += 1 stevilo = stevilo + 1 return koliko Čokolade1. podnalogaJanezek ima nekaj čokolad. Prvi dan poje Napišite funkcijo Pomagaš si lahko z uporabo
Uradna rešitevdef cokolade(st_cokolad, n): """Funkcija vrne število čokolad, ki jih dobi dedek""" dan = 1 while st_cokolad > 0: if st_cokolad < dan: #če je število čokolad manj kot je število dni break st_cokolad -= n*(2**(dan - 1)) if st_cokolad < 0: #če je število čokolad negativno je Janezek pojedel vse st_cokolad = 0 #v tem primeru dedek ne dobi nič dan += 1 return st_cokolad 2. podnalogaJanezek pa je kmalu ugotovil, da dedek nebo dobil skoraj nič čokolad, zato se je odločil, da bo dal vsak dan eno čokolado na stran za svojega prijaznega dedka preden jih začne jesti. Napišite funkcijo Pomagaš si lahko z uporabo
Uradna rešitevdef cokolade2(st_cokolad, n): """Funkcija vrne število čokolad, ki jih dobi dedek""" dan = 1 za_dedka = 0 while st_cokolad > 0: za_dedka += 1 st_cokolad -= 1 if st_cokolad < dan: #če je število čokolad manj kot je število dni break st_cokolad -= n*(2**(dan - 1)) if st_cokolad < 0: #če je število čokolad negativno je Janezek pojedel vse st_cokolad = 0 #v tem primeru dedek ne dobi nič dan += 1 return st_cokolad + za_dedka Mečemo kocko1. podnalogaSestavite funkcijo
smo torej kocko morali vreči 9x, da smo dvakrat zapored vrgli 6. Pomagajte si
s knjižnico Uradna rešitevimport random def dvakrat_zapored(): """"Koliko metov je potrebnih, da dvakrat zapored vržemo 6""" število_metov = 0 prejšni_met = 42 # koliko smo vrgli v prejšnem metu (karkoli razen 6!) while True : # kar neskončna zanka, izstopili bomo z return met = random.randint(1,6) število_metov += 1 if (met == 6) and (prejšni_met == 6): return število_metov prejšni_met = met # še drugačna različica, brez break in while True def dvakrat_zapored(): """Koliko metov je potrebnih, da dvakrat zapored vržemo 6""" met = random.randint(1,6) # opravimo prvi met števec = 1 prejšnji_met = 2 # karkoli, le 6 ne!! while not (prejšnji_met == 6 and met == 6): prejšnji_met = met met = random.randint(1,6) # novi met števec = števec + 1 return števec 2. podnalogaSestavite funkcijo Uradna rešitevimport random def pricakovana_vrednost_dveh6(st_poskusov): '''Povprečje metov, potrebnih da dvakrat zaporedoma vržemo 6 v n poskusih ''' skupno_št_metov = 0 poskus = 1 while poskus <= st_poskusov: število_metov = dvakrat_zapored() # opravimo eno poskus skupno_št_metov = skupno_št_metov + število_metov poskus = poskus + 1 # povprečje return skupno_št_metov / st_poskusov Igra ugibanj1. podnalogaMamica in lukec se igrata igro ugibanj. Mamica ima na mizi 5 posode oštevilčene z 1, 2, 3, 4 in 5. Mamica Lukcu naključno skrije en bonbon v eno škatlo, lukec pa naključno ugotavlja, kam ga je skrila. Če ugotovi pravilno ga dobi in mamica skrije nov bonbon, če ne pa ne in Lukec nadaljuje z ugibanjem. Sestavite funkcijo Uradna rešitevimport random def igraUgibanj(): '''funkcija simulira skrivanje in ugibanje ter vrne število bonbonov, ki jih je Lukec dobil''' stBonbonov = 0 stPoskusov = 0 while stPoskusov != 10: vKateriSkatli = random.randint(1, 5) while stPoskusov != 10: ugibanje = random.randint(1, 5) stPoskusov += 1 if ugibanje == vKateriSkatli: stBonbonov += 1 break return stBonbonov 2. podnalogaMamici je kmalu postalo dolgčas, zato je lukcu začela skrivati 3 bonbone naenkrat. Lukec ugotavlja dokler ne najde vseh treh, nato mu mamica skrije nove 3. Kar pa Lukec ne ve je to, da mu je mamica vedno skrila vse tri bonbonr v isto naključno škatlo. Sestavite funkcijo Uradna rešitevimport random def igraUgibanj2(): '''funkcija simulira skrivanje in ugibanje ter vrne število bonbonov, ki jih je Lukec dobil''' stBonbonov = 0 stPoskusov = 0 while stPoskusov != 10: vKateriSkatli = random.randint(1, 5) kolikoSeSkritih = 3 while stPoskusov != 10: ugibanje = random.randint(1, 5) stPoskusov += 1 if ugibanje == vKateriSkatli: stBonbonov += 1 kolikoSeSkritih -= 1 if kolikoSeSkritih == 0: break return stBonbonovMesto objave ob koncu projekta 15.9.2018 |